package cond

import (
	"log"
	"sync"
	"time"
)

func pubSub() {
	c := sync.NewCond(&sync.Mutex{})
	var wg sync.WaitGroup
	for i := 0; i < 10; i++ {
		wg.Add(1)
		go func(n int) {
			defer wg.Done()
			c.L.Lock()
			c.Wait()
			c.L.Unlock()
			log.Printf("运动员%d都准备就绪\r\n", n)
		}(i)
	}

	go func() {
		//for i := 0; i < 10; i++ {
		//	log.Println("裁判员吹哨")
		//
		//	c.Signal() //唤醒一个
		//	//c.Broadcast() // 唤醒所有
		//
		//	time.Sleep(50 * time.Microsecond)
		//}
		time.Sleep(50 * time.Microsecond)
		log.Println("裁判员吹哨")
		// 广播唤醒所有的等待者
		c.Broadcast() // 唤醒所有
	}()
	wg.Wait()
}
